package edu.tfh.s2.ehkbot.steuerung.fehlersteuerung;

import edu.tfh.s2.ehkbot.daten.AdressenDispatcher;
import edu.tfh.s2.ehkbot.daten.Protokoll;
import edu.tfh.s2.ehkbot.gerete.sensoren.Sensor;
import edu.tfh.s2.ehkbot.steuerung.BusAdresse;

/**
 * FehlerErkennerSensorGrenzwert prüft ein Sensor ob er in einen Grenzwert liegt. 
 * @author zehn
 */
public class FehlerErkennerSensorGrenzwert implements FehlerErkenner {
	private double obererGrenzwert;
	private Sensor sensor;
	private String taetigkeit;
	private double untererGrenzwert;

	/**
	 * Konstruktor für FehlerErkennerSensorGrenzwert.
	 * @param taetigkeit Ein String der die Tätigkeit beschreibt.
	 * @param sensor Der zu beobachtende Sensor.
	 * @param untererGrenzwert Der untere Grenzwert.
	 * @param obererGrenzwert Der Obere Grenzwert.
	 */
	public FehlerErkennerSensorGrenzwert(
											String taetigkeit,
											Sensor sensor,
											double untererGrenzwert,
											double obererGrenzwert) {
		super();
		this.taetigkeit = taetigkeit;
		this.sensor = sensor;
		this.untererGrenzwert = untererGrenzwert;
		this.obererGrenzwert = obererGrenzwert;
	}

	/**
	 * @see edu.tfh.s2.ehkbot.steuerung.fehlersteuerung.FehlerErkenner#pruefe()
	 */
	@Override
	public void pruefe() {
		double messert = sensor.getMesswert();
		if (untererGrenzwert < messert || messert > obererGrenzwert) {
			String msg = String.format(
				"Grenzwert überschreitung Messwert:%f von Sensor %s wärend %s.",
				messert,
				this.toString(),
				taetigkeit);
			Protokoll.getInstanc().fehler("FehlerErkennerSensorGrenzwert", msg, 1);
		}

	}

	/**
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		BusAdresse busA = sensor.getBusAdresse();
		String modul = AdressenDispatcher.getInstance().getModulForAdresse(busA);
		String name = AdressenDispatcher.getInstance().getNameForAdresse(busA);
		return String.format("(%s::%s | lower:%f | upper:%f", modul, name, untererGrenzwert, obererGrenzwert);
	}

}